
//继承中的作用域
//同名隐藏 || 重定义
#ifdef a
//子类和父类都具有独立的作用域
	//1.子类不能访问父类中的私有成员
	//2.不存在函数重载（重载函数：相同作用域下同名函数具有不同的参数列表）-》而子类和父类作用域就不同，不够成重载

#include<iostream>
using namespace std;
class Base {
public:
	void Func() {
		cout << "Base Func" << endl;
	}
	int _b;
};

class Child :public Base
{
public:
	//同名函数，不够成重载，形成重定义，子类自动进行父类中的成员函数隐藏，即屏蔽子类的直接访问
	/*
	void Func() {
		cout << "Func" << endl;
		//__super::_b = 100;->可使用，__super此处就相当于Base
	}
	*/

	
	int Func() {
		cout << "Func" << endl;
		return 0;
	}
	

	//成员函数的同名隐藏与 函数的返回值类型/参数列表 无关
public:
	int _c;
	int _b;
	//该成员变量和基类中存在同名成员，为了防止继承下来后导致重定义，此时子类会屏蔽父类同名成员的直接访问
	//若想访问父类中的该成员_b,需要使用作用域限定符，两种方式如下
		//1.Base::_b
		//2.__super::_b
	
	//double _b;
	//同名隐藏的条件是同名即可，与成员变量的类型无关
};
int main() {
	Child c;
	c._b = 1;//此处访问的默认为子类成员
	c.Base::_b = 2;//这里才是基类
	//c.__super::_b = 100;-->这里不可使用__super，只能在类中使用，用来表示该子类的基类
	
	c.Func();
	c.Base::Func();
	//c.__super::Func();//类中才可使用
	
	return 0;
}
#endif